package org.easy.validator.constant;


import org.easy.validator.exception.ValidatorException;
import org.easy.validator.match.ValidatorHelper;
import org.springframework.util.StringUtils;


/**
 * @author volicy.xu
 */
public enum ValidatorEnum {


    IdCard {
        /**
         *
         * @param value
         * @param errorMsg
         */
        @Override
        public void valiated(Object value, String errorMsg) {
            if (value == null || !ValidatorHelper.isIDCard(value.toString())) {
                throw new ValidatorException(errorMsg);
            }
        }
    },
    UserMail {
        /**
         *
         * @param value
         * @param errorMsg
         */
        @Override
        public void valiated(Object value, String errorMsg) {
            if (value == null || !ValidatorHelper.isEmail(value.toString())) {
                throw new ValidatorException(errorMsg);
            }
        }
    },
    NotBank {
        /**
         *
         * @param value
         * @param errorMsg
         */
        @Override
        public void valiated(Object value, String errorMsg) {
            if (value == null || !StringUtils.hasText(value.toString())) {
                throw new ValidatorException(errorMsg);
            }
        }
    },
    MobileNo {
        /**
         *
         * @param value
         * @param errorMsg
         */
        @Override
        public void valiated(Object value, String errorMsg) {
            if (value == null || !ValidatorHelper.isMobile(value.toString())) {
                throw new ValidatorException(errorMsg);
            }
        }
    };


    /**
     * @param annotationName
     * @return
     */
    public static ValidatorEnum getInstance(String annotationName) {
        ValidatorEnum[] values = ValidatorEnum.values();
        for (ValidatorEnum validatorEnum : values) {
            if (validatorEnum.name().equals(annotationName)) {
                return validatorEnum;
            }
        }
        return null;
    }

    /**
     * @param value
     * @param errorMsg
     */
    public abstract void valiated(Object value, String errorMsg);
}
